import axios from 'axios'
import router from './router'
import QS from 'qs'
// 创建axios实例
const service = axios.create({
  timeout: 3000
})
// 添加request拦截器
service.interceptors.request.use(config => {
  config.withCredentials = true // 允许携带token ,这个是解决跨域产生的相关问题
  let token = sessionStorage.getItem('token')
  // console.log()
  if (token) { // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
    config.headers.Authorization = token
  }
  // console.log(config)
  if (config.method == 'post') {
    config.data = QS.stringify(config.data) // 防止post请求参数无法传到后台
    // //console.log(config.data)
  }
  return config
}, error => {
  Promise.reject(error)
})
// 添加respone拦截器
service.interceptors.response.use(
  response => {
    let res = {}
    res.status = response.status
    res.data = response.data
    return res
  },
  error => {
    if (error.response && error.response.status == 404) {
      router.push('/login')
    }
    return Promise.reject(error.response)
  }
)
// 封装get请求
export function get (url, params = {}) {
  // params.t = new Date().getTime(); //get方法加一个时间参数,解决ie下可能缓存问题.
  return service({
    url: url,
    method: 'get',
    headers: {},
    params
  })
}

// 封装post请求
export function post (url, data = {}) {
  // 默认配置
  let sendObject = {
    url: url,
    method: 'post',

    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
      // 'Content-Type': 'application/json;charset=UTF-8',
      'X-Requested-With': 'XMLHttpRequest',
      'Accept': 'application/json;charset=utf-8'
    },
    // emulateJSON: true,
    data: QS.stringify(data)
  }
  // console.log(data.secret)
  sendObject.data = data
  return service(sendObject)
}

// 封装put方法 (resfulAPI常用)
export function put (url, data = {}) {
  return service({
    url: url,
    method: 'put',
    headers: {
      'Content-Type': 'application/json;charset=UTF-8'
    },
    data: JSON.stringify(data)
  })
}
// 删除方法(resfulAPI常用)
export function deletes (url, params = {}) {
  return service({
    url: url,
    method: 'delete',
    headers: {},
    params
  })
}

// 不要忘记export
export {
  service
}
